#ifndef _PROGRESSIVE_PHOTON_MAP_RENDERER_H_
#define _PROGRESSIVE_PHOTON_MAP_RENDERER_H_


#include <vector>
#include "renderer.h"
#include "photon_map.h"

class Sampler;
class Camera;
class ImageFilm;
class OpenCLIntersectDevice;
class VolumeIntegrator;
class ConsoleProgressReporter;
class Display;

struct scene_info_memory_t;

class PPMRenderer:public Renderer
{
public:
	PPMRenderer(Camera* c,ImageFilm* im,Sampler* s,photon_map_t* photon_map);
	virtual void Render(const scene_info_memory_t& scene_info);
	virtual ~PPMRenderer();
private:
	void InitializePhotonMap(photon_map_t *photon_map, const scene_info_memory_t& scene_info,
		RandomNumberGeneratorMT19937 *rng);
	void RenderIteration(unsigned iteration);
private:
	Camera* camera_;
	ImageFilm* image_;
	Sampler* sampler_;
	//sppm data
	photon_map_t* photon_map_;
	VolumeIntegrator *volume_integrator_;

	ConsoleProgressReporter* progress_reporter_;
	//

};

#endif